<?php

class Default_Model_Product
{

    protected $_table;
    protected $_db;

    public function __construct ()
    {
        $this->_table = new Application_Model_DbTable_Sanpham();
        $this->_db = Zend_Registry::get('db');
    }

    public function all ()
    {
        /*
         * Trả ra toàn bộ sản phẩm trong csdl Luôn trả ra đối tượng kiểu
         * Zend_Db_Table_Rowset_Abstract
         */
        return $this->_table->fetchAll();
    }

    public function id ($id)
    {
        /*
         * Trả ra sản phẩm tương ứng với id
         */
        return $this->_table->find($id);
    }

    public function boys ($limit = 10)
    {
        /*
         * Lấy ra các sản phẩm dành cho bé trai Luôn trả ra đối tượng kiểu
         * Zend_Db_Table_Rowset_Abstract
         */
        return $this->_table->fetchAll(
                $this->_table->select()
                    ->where('gioi_tinh = :gt')
                    ->bind(
                        array(
                                ':gt' => '1'
                        ))
                    ->limit($limit,0)
                );
    }
    
    public function girls ($limit = 4)
    {
    	/*
    	 * Lấy ra các sản phẩm dành cho bé gái Luôn trả ra đối tượng kiểu
    	* Zend_Db_Table_Rowset_Abstract
    	*/
    	return $this->_table->fetchAll(
    			$this->_table->select()
    			->where('gioi_tinh = :gt')
    			->bind(array(
    					':gt' => '0'
    			))
    			->limit($limit,0)
    	);
    }

    public function space ($id)
    {
        /*
         * Trả ra số lượng có thể mua
         */
        $item = $this->_table->find($id)->current();
        if (! is_null($item))
            return $item->so_luong > $item->dat_mua ? $item->so_luong - $item->dat_mua : 0;
        else
            return 0;
    }
    
    public function available($id)
    {
        /* Kiểm tra trạng thái , số lượng tồn kho của mặt hàng
         * */
        $num = $this->space($id);
        if($num > 0)
        {
            /* Thực hiện thêm trường vào bảng tbl_carts nếu không tồn tại ,
             * ngược lại sẽ thực hiện cập nhật trạng thái tồn hàng
             * */
            $sql = <<<EOD
                INSERT INTO `tbl_carts` ( id_sp, space, session_buy )
                VALUES ( :id , :space , '0' ) 
                    ON DUPLICATE KEY UPDATE space = :space
EOD;
            $stmt = $this->_db->query($sql,array(':id'=>$id ,':space'=>$num));
        	return true;
        }else 
            return false;
    }
    
    
    public function addCart( $id , $num = 1 )
    {
    	if($this->available($id) and $num >=1 )
    	{
    	    $cart = new Application_Model_DbTable_Giohang();
    	    $guest = Zend_Session::getId();
    	    
    	    /* Lấy ra phiên mua hàng của khách*/
    	    $row = $cart->fetchRow(
                $cart->select()
                    ->where('session_user = :guest and id_sp = :id')
                    ->bind(
                        array(
                                ':guest' => $guest,
                                ':id' => $id
                        ))
                );
    	    /* Kích thước số lượng sản phẩm muốn mua*/
    	    $size = !is_null($row)? $row->so_luong + $num : $num;
    	    
    	    /*Kiểm tra kho hàng*/
    	    $kho = new Application_Model_DbTable_Khohang();
    	    $avi = $kho->fetchRow(
    	    		$kho->select()
    	    		->where("id_sp = :id")
    	    		->bind(array(':id'=>$id))
    	    );
    	    
    	    /* Tổng số sản phẩm trong kho + kích thước khối lượng muốn mua */
    	    $sum = !is_null($avi)?$avi->session_buy + $num : $size;
    	    
    	    if(!is_null($avi) and $sum <= $avi->space)
    	    {
    	    	if(is_null($row))
    	    	{
    	    	    /* Nếu giỏ hàng của khách chưa có sản phẩm*/
    	    	    $cart->insert(array(
    	    	    		'session_user'=> $guest,
    	    	    		'id_sp' => $id,
    	    	    		'so_luong' => $num,
    	    	    		'id' => 'NULL'
    	    	    ));
    	    	    
    	    	}else{
    	    	    /* Sản phẩm đã có trong giỏ hàng*/
    	    	    $row->so_luong +=$num;
    	    	    $row->save();
    	    	}
    	    	$avi->session_buy += $num;
    	    	$avi->save();
    	    	return true;
    	    }
    	}
    	return false;
    }
    
    
    public function removeCart( $id , $num = 1 )
    {
        $cart = new Application_Model_DbTable_Giohang();
        $guest = Zend_Session::getId();
        
        /* Kiểm tra giỏ hàng */
        $row = $cart->fetchRow(
                $cart->select()
                    ->where('session_user = :guest and id_sp = :id')
                    ->bind(
                        array(
                                ':guest' => $guest,
                                ':id' => $id
                        ))
                );
        
        /* Sản phẩm có trong giỏ hàng*/
        if(!is_null($row) and $num >=0)
        {
            /*Kiểm tra kho hàng*/
            $kho = new Application_Model_DbTable_Khohang();
            $avi = $kho->fetchRow(
            		$kho->select()
            		->where("id_sp = :id")
            		->bind(array(':id'=>$id))
            );
        	if($num < $row->so_luong)
        	{
        		$row->so_luong -= $num;
        		$row->save();
        	}else
        	{
        		$row->delete();
        	}
        	$avi->session_buy -= $num;
        	$avi->save();
        }
        return false;
    }
    
    public function resize($id, $num)
    {
        $cart = new Application_Model_DbTable_Giohang();
        $guest = Zend_Session::getId();
        
        /* Kiểm tra giỏ hàng */
        $row = $cart->fetchRow(
        		$cart->select()
        		->where('session_user = :guest and id_sp = :id')
        		->bind(
        				array(
        						':guest' => $guest,
        						':id' => $id
        				))
        );
        if(!is_null($row))
        {            
            /*Kiểm tra kho hàng*/
            $kho = new Application_Model_DbTable_Khohang();
            $avi = $kho->fetchRow(
            		$kho->select()
            		->where("id_sp = :id")
            		->bind(array(':id'=>$id))
            );
            
            /* Nếu hàng có trong kho */
            if(!is_null($avi) and $num > 0)
            {
                $old = $row->so_luong;
                $new = $num;
                
            	$change = $avi->session_buy - $old + $new;
            	if($change <= $avi->space and $change >=0)
            	{
            		$row->so_luong = $row->so_luong - $old + $new;
            		$row->save();
            		
            		$avi->session_buy = $change;
            		$avi->save();
            		return true;
            	}
            }
            return false;
        }
        return false;
    }
    
    public function search($keyword)
    {
        $kw = mysql_escape_string($keyword);
        $a = str_replace('%','\%',$kw);
        $sql=<<<EOD
            SELECT *
            FROM `tbl_products`
            WHERE `ten_san_pham` LIKE concat( '%', :kw , '%' )
EOD;
        return $this->_db->query($sql,array(':kw'=>$a))->fetchAll();
    }
    
}

